אהלן.
יש לי מחלקה של עיצוב שאיתה אני טוען את קובצי העיצוב שלי .
משהו כזה :
עכשיו , איך אני יכול ליצור דבר כזה ?
שבקובץ שאני טוען אני אגש אל המשתנה title בצורה הזו :
$this->title;
תודה .
יש לי מחלקה של עיצוב שאיתה אני טוען את קובצי העיצוב שלי .
משהו כזה :
<?php
class style
{
private $ext = '.php';
private $dir = 'data/style/';
private $allowd_style_part = array('meta','header','footer');
private $data = array();
public function __construct()
{
}
public function __get($key)
{
return array_key_exists($key, $this->data) ? $this->data[$key] : null;
}
public function __set($key, $value)
{
$this->data[$key] = $value;
}
public function load($part)
{
if(in_array($part,$this->allowd_style_part))
{
require $this->dir,$part,$this->ext;
}else{
throw new Exception($part.' Doesnt Find in dir "'.$this->dir.'"');
}
}
}
class style
{
private $ext = '.php';
private $dir = 'data/style/';
private $allowd_style_part = array('meta','header','footer');
private $data = array();
public function __construct()
{
}
public function __get($key)
{
return array_key_exists($key, $this->data) ? $this->data[$key] : null;
}
public function __set($key, $value)
{
$this->data[$key] = $value;
}
public function load($part)
{
if(in_array($part,$this->allowd_style_part))
{
require $this->dir,$part,$this->ext;
}else{
throw new Exception($part.' Doesnt Find in dir "'.$this->dir.'"');
}
}
}
עכשיו , איך אני יכול ליצור דבר כזה ?
$style = new style();
$style->meta->title = "PageTitle";
$style->load('meta');
$style->meta->title = "PageTitle";
$style->load('meta');
שבקובץ שאני טוען אני אגש אל המשתנה title בצורה הזו :
$this->title;
תודה .
5 תשובות
class Meta
{
public $title;
}
class style
{
private $ext = '.php';
private $dir = 'data/style/';
private $allowd_style_part = array('meta','header','footer');
private $data = array();
private $meta = new Meta();
public function __construct()
{
}
public function __get($key)
{
return array_key_exists($key, $this->data) ? $this->data[$key] : null;
}
public function __set($key, $value)
{
$this->data[$key] = $value;
}
public function load($part)
{
if(in_array($part,$this->allowd_style_part))
{
require $this->dir,$part,$this->ext;
}else{
throw new Exception($part.' Doesnt Find in dir "'.$this->dir.'"');
}
}
}
{
public $title;
}
class style
{
private $ext = '.php';
private $dir = 'data/style/';
private $allowd_style_part = array('meta','header','footer');
private $data = array();
private $meta = new Meta();
public function __construct()
{
}
public function __get($key)
{
return array_key_exists($key, $this->data) ? $this->data[$key] : null;
}
public function __set($key, $value)
{
$this->data[$key] = $value;
}
public function load($part)
{
if(in_array($part,$this->allowd_style_part))
{
require $this->dir,$part,$this->ext;
}else{
throw new Exception($part.' Doesnt Find in dir "'.$this->dir.'"');
}
}
}
אני רוצה אבל שזה יהיה באופן דינאמי , לכל מיני קובצי עיצוב שיהיה לי - גם כאלה לא מתוכננים.
תחשוב קצת יותר אופקי. getters and setters בסיסי כבר ממישת, עכשיו תחשוב איך להוסיף אפשרות לnested arrays (מערך בתוך מערך..)
פשוט תעשה לולאה כזאת
class Meta
{
public function __construct()
{
foreach($arr as $a)
{
$this->$a['name'] = $a['content'];
}
}
}
{
public function __construct()
{
foreach($arr as $a)
{
$this->$a['name'] = $a['content'];
}
}
}
או איך שזה לא עובד אצלך בקוד (אין לי מושג)
ודרך אגב למה אתה לא משתמש בFRAMEWORK או מערכת מוכנה?
לא משנה כמה דינאמי אתה רוצה וכמה דינאמי השפה מאפשרת, אבל כשאתה אומר שאתה רוצה
$style->meta->title = "PageTitle";
מה זה המשתנה meta כאן? מאיזה סוג הוא? מערך? אובייקט מסוג meta? אובייקט מסוג StdClass ?
בתור מתכנת אתה בראש צריך להחליט מאיזה סוג יהיה המשתנה הזה ואיך אתה רוצה להשתמש בו אחרי זה.
אין דבר כזה בתכנות "כאלה לא מתוכננים." מבחינתך אתה מתנן הכל בגדר השימושים האפשריים.
ככה שהתשובה הראשונה של ilikeme הכי נכונה.